1 package uba.db.sql.language;
2
3 import java.util.List;
4
5 import org.apache.commons.collections.ClosureUtils;
6 import org.apache.commons.collections.CollectionUtils;
7
8 /***
9 * Clase abstracta utilizada como base para crear "visitors" de sentencias SQL.
10 *
11 * @version $Revision: 1.10 $
12 */
13 public abstract class VisitorBehavior implements Visitor {
14 /***
15 * Esta implementación por default visita cada una de las partes del
16 * criterio de selección.
17 *
18 * @param criteria
19 * criterio de seleccion a visitar.
20 */
21 public void visitAndSelectionCriteria(AndSelectionCriteria criteria) {
22 visitBinarySelectionCriteria(criteria);
23 }
24
25 /***
26 * @see uba.db.sql.language.Visitor#visitColumnName(uba.db.sql.language.ColumnName)
27 */
28 public void visitColumnName(ColumnName columnName) {}
29
30 /***
31 * @see uba.db.sql.language.Visitor#visitCreateTable(uba.db.sql.language.CreateTable)
32 */
33 public void visitCreateTable(CreateTable table) {
34 table.tableName().accept(this);
35 invokeAcceptForAll(table.columnDeclarations());
36 invokeAcceptForAll(table.primaryKeyColumns());
37 }
38
39 public void visitCreateIndex(CreateIndex index) {
40 index.name().accept(this);
41 index.column().accept(this);
42 }
43
44 public void visitDisplayAllColumns(DisplayAllColumns columns) {}
45
46 /***
47 * Esta implementación por default visita cada una de las columnas.
48 *
49 * @param columns
50 * columnas a visitar
51 */
52 public void visitDisplayMultipleColumns(DisplayMultipleColumns columns) {
53 invokeAcceptForAll(columns.columns());
54 }
55
56 public void visitDisplayOneColumn(DisplayOneColumn column) {
57 column.expression().accept(this);
58 }
59
60 public void visitEqualComparison(EqualComparison comparison) {
61 visitComparison(comparison);
62 }
63
64 public void visitGreatherThanComparison(GreatherThanComparison comparison) {
65 visitComparison(comparison);
66 }
67
68 public void visitGreatherThanEqualsComparison(GreatherThanEqualsComparison comparison) {
69 visitComparison(comparison);
70 }
71
72 public void visitInSelectionCriteria(InSelectionCriteria criteria) {
73 criteria.valueToFind().accept(this);
74 criteria.valueList().accept(this);
75 }
76
77 /***
78 * @see uba.db.sql.language.Visitor#visitInsert(uba.db.sql.language.Insert)
79 */
80 public void visitInsert(Insert insert) {
81 insert.tableName().accept(this);
82 insert.values().accept(this);
83 }
84
85 public void visitIntegerValue(IntegerValue value) {}
86
87 public void visitJoin(Join join) {
88 join.left().accept(this);
89 join.right().accept(this);
90 }
91
92 public void visitLessThanComparison(LessThanComparison comparison) {
93 visitComparison(comparison);
94 }
95
96 public void visitLessThanEqualsComparison(LessThanEqualsComparison comparison) {
97 visitComparison(comparison);
98 }
99
100 /***
101 * @see uba.db.sql.language.Visitor#visitNegatedSelectionCriteria(uba.db.sql.language.NegatedSelectionCriteria)
102 */
103 public void visitNegatedSelectionCriteria(NegatedSelectionCriteria criteria) {}
104
105 public void visitNotInSelectionCriteria(NotInSelectionCriteria criteria) {}
106
107 /***
108 * Esta implementación por default visita cada una de las partes del
109 * criterio de selección.
110 *
111 * @param criteria
112 * criterio de seleccion a visitar.
113 */
114 public void visitOrSelectionCriteria(OrSelectionCriteria criteria) {
115 criteria.left().accept(this);
116 criteria.right().accept(this);
117 }
118
119 /***
120 * @see uba.db.sql.language.Visitor#visitQualifiedColumnName(uba.db.sql.language.QualifiedColumnName)
121 */
122 public void visitQualifiedColumnName(QualifiedColumnName name) {}
123
124 /***
125 * Esta implementación por default visita cada una de las partes que
126 * conforman el SELECT.
127 *
128 * @param select
129 * el select a visitar
130 */
131 public void visitSelect(Select select) {
132 select.displayColumns().accept(this);
133 select.source().accept(this);
134 select.criteria().accept(this);
135 }
136
137 public void visitSingleSelectionCriteria(SingleSelectionCriteria criteria) {
138 criteria.expression().accept(this);
139 }
140
141 public void visitStringValue(StringValue value) {}
142
143 /***
144 * @see uba.db.sql.language.Visitor#visitTableName(uba.db.sql.language.TableName)
145 */
146 public void visitTableName(TableName name) {}
147
148 public void visitTableSelectionSource(TableSelectionSource source) {
149 source.tableName().accept(this);
150 }
151
152 public void visitCharColumnDeclaration(CharColumnDeclaration declaration) {}
153
154 public void visitIntegerColumnDeclaration(IntegerColumnDeclaration declaration) {}
155
156 public void visitValueEnumeration(ValueEnumeration enumeration) {
157 invokeAcceptForAll(enumeration.values());
158 }
159
160 private void invokeAcceptForAll(List objs) {
161 CollectionUtils.forAllDo(objs, ClosureUtils
162 .invokerClosure("accept",
163 new Class[] { Visitor.class },
164 new Object[] { this }));
165 }
166
167 private void visitBinarySelectionCriteria(BinarySelectionCriteriaBehavior criteria) {
168 criteria.left().accept(this);
169 criteria.right().accept(this);
170 }
171
172 private void visitComparison(ComparisonBehavior comparison) {
173 comparison.left().accept(this);
174 comparison.right().accept(this);
175 }
176
177 public void visitIndexName(IndexName index) {}
178 }